#include <stdlib.h>
#include <stdbool.h>
#include "vector_dinamico.h"
#include "cola.h"


#ifndef DIR_EXP_H
#define DIR_EXP_H

/* ******************************************************************
 *                DEFINICION DE LOS TIPOS DE DATOS
 * *****************************************************************/

/* Tipo de datos donde se almacenan las extensiones que deben
 * quedar. Toda extension que no sea agregada, no sera seleccionada */
typedef struct filtro_archivos filtro_archivos_t;



/* ******************************************************************
 *                    PRIMITIVAS Y FUNCIONES
 * *****************************************************************/

/* Junta la ruta con el nombre del archivo */
char* componer_ruta(const char* dir, const char* arch);

/* Crea un filtro de archivos, sin extensiones a filtrar. En caso de error devuelve NULL */
filtro_archivos_t* filtro_archivos_crear();


/* Destruye el filtro recibido como parametro */
void filtro_archivos_destruir(filtro_archivos_t* filtro);


/* Agrega la extension pasada como parametro.
 * La extension debe ser pasada sin el punto (.).
 * ex: filtro_archivos_agregar_extension(filtro, "txt") */
bool filtro_archivos_agregar_extension(filtro_archivos_t* filtro, char* extension);


/* Devuelve una copia de las extensiones agregadas al filtro y
 * la cantidad en la variable pasada como parametro */
char** filtro_archivos_obtener_extensiones(filtro_archivos_t* filtro, int* cant);


/* Filtra el vector de archivos recibido, devolviendo un nuevo vector con los archivos
 * de las extensiones agregadas. Se recibe en el parametro cant la cantidad de archivos
 * en el vector original y (¡¡WARNING!!) el valor es sobrescrito con la cantidad de
 * archivos en el vector filtrado. En caso de error se devuelve NULL */
vector_t* filtro_archivos_filtrar(filtro_archivos_t* filtro, vector_t* archivos, int* cant);


/* Crea un vector con todos los archivos y directorios contenidos en el directorio
 * recibido como paramtero  */
vector_t* dir_obtener_archivos(const char* directorio, int* cant_archivos);


/* Extrae la extension de un archivo recibido como parametro */
char* archivo_extraer_extension(char* archivo);


#endif //DIR_EXP_H
